package com.tarena.lbs.basic.service.impl;

import com.tarena.lbs.basic.dao.mapper.AreaMapper;
import com.tarena.lbs.basic.dao.repository.AreaRepository;
import com.tarena.lbs.basic.pojo.po.AreaPO;
import com.tarena.lbs.basic.pojo.po.TagLibraryPO;
import com.tarena.lbs.basic.pojo.vo.AreaVO;
import com.tarena.lbs.basic.pojo.vo.TagVO;
import com.tarena.lbs.basic.service.AreaService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Slf4j
@Service
public class AreaServiceImpl implements AreaService {
    @Autowired
    private AreaRepository areaRepository;
    @Override
    public List<AreaVO> queryProvinces() {
        List<AreaVO> list = areaRepository.selectProvinces();
        return list;
    }

    @Autowired
    private AreaMapper areaMapper;

    @Override
    public List<AreaVO> getListArea(Integer parentId) {

        List<AreaVO> list = areaMapper.getListArea(parentId);
        for (AreaVO p: list){
            Long id =p.getId();
            List<AreaVO> children = getListArea(id.intValue());
            p.setChildren(children);
        }
        return list;

    }

    @Override
    public List<AreaVO> queryPrefecture() {
        //最终要返回的VO标签（包含所有三级标签信息）
        List<AreaVO> list = new ArrayList<>();
        // 查询所有一级标签（特征：parent_id=0的标签）
        List<AreaPO> pos = areaMapper.selectParentId();

        // 遍历每个一级标签，获取其下的二级标签
        for (AreaPO po: pos) {
            log.debug("一级标签：{}", po);
            ////new 一个VO对象
            AreaVO areaVO = new AreaVO();
            //提前设置二级返回标签
            List<AreaVO> citiesVO = new ArrayList<>();
            //复制二级标签到VO对象中
            BeanUtils.copyProperties(po, areaVO);
            // 将一级id当做条件，查询该一级标签下的二级标签。
            List<AreaPO> pos1 = areaMapper.selectParent1Id(areaVO.getId());

            // 遍历每个二级标签（二级标签内，就是最终的三级数据）
            for (AreaPO po1 : pos1) {
            log.debug("二级标签：{}", po1);
                //new 一个VO对象
                AreaVO areaV01 = new AreaVO();
                //复制三级标签到VO对象中
                BeanUtils.copyProperties(po1, areaV01);
                // 将封装好的VO对象添加到二级标签结果集合
                citiesVO.add(areaV01);
                }
                //将结果给到一级VO对象
                areaVO.setChildren(citiesVO);
                //再将一级VO对象添加到最终结果集合中
                list.add(areaVO);
                }
                // 返回最终的三级标签数据集合
                return list;
            }
}
